package ace.tool.generate.code.impl.resolver.scheme.model;

import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author caspar
 * @date 2023/11/17 10:27
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class EntityClassSchemeModel {
  /**
   * project项目根目录 d:/generate/ace-module-demo-projects
   */
  private String projectRootDir;

  /**
   * project 项目pom文件完全名 d:/generate/ace-module-demo-projects/pom.xml
   */
  private String projectPomFileFullName;

  /**
   * project 项目readme文件完全名 d:/generate/ace-module-demo-projects/readme.xml
   */
  private String projectReadmeFileFullName;

  /**
   * project 项目maven名 ace-module-demo-projects
   */
  private String projectMavenArtifactId;

  /**
   * api 项目根目录 d:/generate/ace-module-demo-projects/ace-module-demo-api
   */
  private String apiProjectRootDir;

  /**
   * api 项目根目录 d:/generate/ace-module-demo-projects/ace-module-demo-api/src/main/resources
   */
  private String apiProjectResourceRootDir;

  /**
   * api 项目代码根目录 d:/generate/ace-module-demo-projects/ace-module-demo-api/src/main/java
   */
  private String apiProjectSourceCodeRootDir;

  /**
   * api 项目pom文件完全名 d:/generate/ace-module-demo-projects/ace-module-demo-api/pom.xml
   */
  private String apiProjectPomFileFullName;

  /**
   * api 项目maven名 ace-module-demo-api
   */
  private String apiProjectMavenArtifactId;

  /**
   * api 包完全名称
   */
  private String apiPackageFullName;

  /**
   * core 项目maven名 ace-module-demo-core-starter
   */
  private String coreProjectMavenArtifactId;

  /**
   * core 项目resources文件完全名称 d:/generate/ace-module-demo-projects/ace-module-demo-core-starter/src/main/resources
   */
  private String coreProjectResourcesRootDir;

  /**
   * sdk 项目maven名 ace-module-demo-sdk-starter
   */
  private String sdkProjectMavenArtifactId;

  /**
   * sdk 项目resources文件完全名称 d:/generate/ace-module-demo-projects/ace-module-demo-sdk-starter/src/main/resources
   */
  private String sdkProjectResourcesRootDir;

  /**
   * sdk 项目 org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件完全名称 d:/generate/ace-module-demo-projects/ace-module-demo-sdk-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
   */
  private String sdkProjectResourcesAutoConfigurationImportsFileFullName;

  /**
   * sdk 项目 spring.factories 文件完全名称 d:/generate/ace-module-demo-projects/ace-module-demo-sdk-starter/src/main/resources/META-INF/spring.factories
   */
  private String sdkProjectResourcesSpringFactoriesFileFullName;

  /**
   * sdk 项目pom文件完全名称 d:/generate/ace-module-demo-projects/ace-module-demo-sdk-starter/pom.xml
   */
  private String sdkProjectPomFileFullName;

  /**
   * sdk 项目 自动配置类文件完全名称 d:/generate/ace-module-demo-projects/ace-module-demo-sdk-starter/src/main/java/ace/module/demo/sdk/autoconfig/DemoSdkAutoConfig.java
   */
  private String sdkProjectAutoConfigClassFileFullName;

  /**
   * sdk 项目 自动配置类完全名称 ace.module.demo.sdk.autoconfig
   */
  private String sdkProjectAutoConfigClassPackageFullName;

  /**
   * sdk 项目 自动配置类完全名称 ace.module.demo.sdk.autoconfig.DemoSdkAutoConfig
   */
  private String sdkProjectAutoConfigClassFullName;

  /**
   * sdk 项目 自动配置类名称 DemoSdkAutoConfig
   */
  private String sdkProjectAutoConfigClassName;

  /**
   * sdk 项目 自动配置类完全名称 ace.module.demo.sdk.core.contract.impl.DemoSdkFeignScanner
   */
  private String sdkProjectFeignScannerClassFullName;

  /**
   * sdk 项目 自动配置类名称 DemoSdkFeignScanner
   */
  private String sdkProjectFeignScannerClassName;

  /**
   * 实体名称
   */
  private String entityClassName;

  /**
   * 实体完全名称
   */
  private String entityClassFullName;

  /**
   * 模型备注
   */
  private String remark;

  /**
   * 模型字段
   */
  private List<EntityClassSchemeModelField> fields;

  /**
   * 索引
   */
  private List<EntityClassSchemeModelTableIndex> indexes;

  /**
   * dto 包完全名称
   */
  private String dtoPackageFullName;

  /**
   * contract api 包完全名称
   */
  private String feignApiPackageFullName;

  /**
   * contract 包完全名称
   */
  private String feignPackageFullName;

  /**
   * 实体类id类型
   */
  private String entityIdType;

  /**
   * dto 实体类文件完全名称
   */
  private String dtoClassFileFullName;

  /**
   * dto 实体类名称
   */
  private String dtoClassName;

  /**
   * dto 实体类完全名称
   */
  private String dtoClassFullName;

  /**
   * api 类完全名称
   */
  private String apiClassName;

  /**
   * api 类完全完全名称
   */
  private String apiClassFullName;

  /**
   * api 类文件完全名称
   */
  private String apiClassFileFullName;

  /**
   * contract api 类文件完全名称 d:/generate/ace-module-demo-projects/ace-module-demo-sdk-starter/src/main/java/ace/module/demo/sdk/contract/DemoFeignApi.java
   */
  private String feignApiClassFileFullName;

  /**
   * contract api 类完全名称
   */
  private String feignApiClassName;

  /**
   * contract api 类完全完全名称
   */
  private String feignApiClassFullName;

  /**
   * contract 类文件完全名称 d:/generate/ace-module-demo-projects/ace-module-demo-sdk-starter/src/main/java/ace/module/demo/sdk/contract/impl/DemoFeign.java
   */
  private String feignClassFileFullName;

  /**
   * contract 类名称
   */
  private String feignClassName;

  /**
   * contract 类完全完全名称
   */
  private String feignClassFullName;

  /**
   * contract 类名称 首写字母小写
   */
  private String feignFirstLowercaseClassName;

  /**
   * contract name contextId path 的配置前缀
   */
  private String feignConfigPrefix;

  /**
   * 命名空间
   */
  private String namespace;

  /**
   * 小写破折号类名
   */
  private String entityClassLowercaseDashName;

  /**
   * sdk rest controller 类名
   */
  private String restRpcControllerClassName;

  /**
   * sdk rest controller 完全类名
   */
  private String restRpcControllerClassFullName;

  /**
   * sdk rest controller 包完全路径
   */
  private String restRpcControllerPackageFullName;

  /**
   * manager 类的包完全路径
   */
  private String managerPackageFullName;

  /**
   * manager 类的完全名称
   */
  private String managerClassFullName;

  /**
   * manager 类的名称
   */
  private String managerClassName;

  /**
   * manager impl 类的包完全路径
   */
  private String managerImplPackageFullName;

  /**
   * manager impl 类的完全名称
   */
  private String managerImplClassFullName;

  /**
   * manager impl 类的名称
   */
  private String managerImplClassName;

  /**
   * constant 静态 类的文件完全名称
   * d:/generate/ace-module-demo-projects/ace-module-demo-api/src/main/java/ace/module/demo/api/constant/DemoModuleConstant.java
   */
  private String constantClassFileFullName;

  /**
   * constant 静态 类的包完全名称
   * ace.module.demo.api.constant
   */
  private String constantPackageFullName;

  /**
   * constant 静态 类的完全名称
   * ace.module.demo.api.constant.DemoModuleConstant
   */
  private String constantClassFullName;

  /**
   * constant 静态 类的名称
   * DemoModuleConstant
   */
  private String constantClassName;

  /**
   * 相关枚举
   */
  private List<EntityClassSchemeEnumModel> enums;
}
